На соревнованиях по фигурному
катанию n судей выставляют оценки спортсменам. Технический работник
соревнований удаляет все максимальные и минимальные оценки, а из оставшихся
вычисляет среднее арифметическое. Этот результат считается итоговым баллом
спортсмена. Определите итоговый балл для каждого спортсмена.
Вход. В первой строке заданы два целых
числа: количество судей n (0 < n ≤ 10) и количество спортсменов m (0 < m ≤ 100). В
следующих m строках содержится n целых чисел – оценки всех судей
для каждого фигуриста.
Выход. Выведите в одной строке m
чисел, каждое с точностью до двух десятичных знаков, – итоговый балл каждого
спортсмена.
Пример
входа |
Пример
выхода |
5 4 7 8 9 8 10 6 5 5 4 7 9 9 10 7 7 7 7 10 9 8 |
8.33 5.33 9.00 8.50 |
обработка
массивов
Анализ алгоритма
Для каждого
спортсмена найдем минимальную min и максимальную max оценки. Затем вычислим средний балл, не учитывая min и max.
Пример
Для первого
фигуриста минимальная
оценка 7, максимальная 10. Среднее арифметическое оценок, отличных от 7 и 10, равно (8
+ 9 + 8) / 3 = 8.33.
Для последнего
фигуриста минимальная
оценка 7, максимальная 10. Среднее арифметическое оценок, отличных от 7 и 10, равно (8
+ 9) / 2 = 8.50.
Реализация алгоритма
Читаем количество судей n и
количество спортсменов m.
scanf("%d %d", &n, &m);
Последовательно обрабатываем данные каждого фигуриста.
for (i = 0; i < m; i++)
{
scanf("%d", &mas[0]);
Находим наименьшую min и наибольшую max оценки для
текущего i-го фигуриста.
min = max = mas[0];
for (j = 1; j < n; j++)
{
scanf("%d", &mas[j]);
if (mas[j] > max) max =
mas[j];
if (mas[j] < min) min =
mas[j];
}
Вычисляем:
·
Сумму оставшихся оценок в переменной sum.
·
Количество оставшихся оценок в переменной cnt.
sum = cnt = 0;
for (j = 0; j < n; j++)
Наименьшие и наибольшие баллы в расчётах не учитываются.
if ((mas[j] != min) && (mas[j] != max))
{
sum += mas[j];
cnt++;
}
Вычисляем и выводим среднее арифметическое оценки для i-го фигуриста.
res = 1.0 * sum / cnt;
printf("%.2lf ", res);
}
printf("\n");
Python реализация
Читаем количество судей n и
количество спортсменов m.
n, m = map(int,input().split())
Последовательно обрабатываем данные каждого фигуриста.
for _ in range(m):
lst = list(map(int,input().split()))
Находим наименьшую min и наибольшую max оценки для
текущего фигуриста.
min_el = min(lst)
max_el = max(lst)
Вычисляем:
·
Сумму оставшихся оценок в переменной s.
·
Количество оставшихся оценок в переменной cnt.
s = sum(x for x in
lst if x != min_el and x != max_el)
cnt = sum(1 for x in
lst if x != min_el and x != max_el)
Вычисляем и выводим среднее арифметическое оценки для текущего
фигуриста.
print("%.2f" %(s / cnt), end = ' ')